package com.turbo.cloud.ods.web.logic;

import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.turbo.cloud.core.base.PageQuery;
import com.turbo.cloud.core.security.utils.SecurityUtil;
import com.turbo.cloud.core.utils.PageUtil;
import com.turbo.cloud.ods.web.entity.OdsReportRecord;
import com.turbo.cloud.ods.web.model.OdsReportRecordQo;
import com.turbo.cloud.ods.web.model.OdsReportRecordVo;
import com.turbo.cloud.ods.web.service.OdsReportRecordService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * <p>
 * 报表导出记录表 前端控制器
 * </p>
 *
 * @author zhangluning
 * @since 2024-08-07
 */
@Slf4j
@RequiredArgsConstructor
@Component
public class OdsReportRecordLogic {

    final OdsReportRecordService odsReportRecordService;

    /**
     * 根据当前系统ID，查询报表导出记录列表
     *
     * @return Page
     */
    public Page<OdsReportRecordVo> queryReportRecordPage(PageQuery<OdsReportRecordQo> pageQuery) {
        OdsReportRecordQo odsReportRecordQo = PageUtil.getPageQueryParam(pageQuery, OdsReportRecordQo::new);

        LambdaQueryWrapper<OdsReportRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(OdsReportRecord::getSystemId, SecurityUtil.getCurrentSystemId());

        lambdaQueryWrapper.like(CharSequenceUtil.isNotBlank(odsReportRecordQo.getReportNameByLike()),
                OdsReportRecord::getReportName,
                odsReportRecordQo.getReportNameByLike());
        lambdaQueryWrapper.like(CharSequenceUtil.isNotBlank(odsReportRecordQo.getReportCodeByLike()),
                OdsReportRecord::getReportCode,
                odsReportRecordQo.getReportCodeByLike());

        lambdaQueryWrapper.orderByDesc(OdsReportRecord::getCreatedDate);

        Page<OdsReportRecord> odsReportRecordPage = odsReportRecordService.page(pageQuery.toPage(), lambdaQueryWrapper);

        return PageUtil.toPageView(odsReportRecordPage, OdsReportRecordVo::new);
    }
}
